package com.xinqi.task;

import com.xinqi.service.BlogService;
import lombok.extern.slf4j.Slf4j;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.time.LocalTime;

@Slf4j
public class LikeTaskAtNight extends QuartzJobBean {
    @Autowired
    BlogService blogService;

    @Autowired
    StringRedisTemplate stringRedisTemplate;

    /**
     * 用来从redis中的zset中获取点赞缓存的键值对，间隔时间存入mysql
     * 这里就夜间执行吧，因为lua会阻塞redis其他操作，选择夜间流量低时进行执行
     * @param context
     * @throws JobExecutionException
     */
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        int hour = LocalTime.now().getHour();
//        int minute = LocalTime.now().getMinute();
        if (hour == 3){
            // 要执行的内容就写在这个函数中
//        blogService.updateAllLikeListToDatabase();//这个没使用pipeline技术，效果应该是明显低于updateAllLikeListToDatabaseByPipeline1
            log.debug("LikeTaskAtNight - time is {}",System.currentTimeMillis());
//        blogService.updateAllLikeListToDatabaseByPipeline1();//这个使用了pipeline技术，但是还有优化空间，比如书对sql的更新可以说批量更新
            blogService.updateAllLikeListToDatabaseByLua();//这个使用了lua技术，但是还有优化空间，比如书对sql的更新可以说批量更新

        }
    }

}